/*important class to record every steps in one game
 *it ensure users can go back to a certain moment
 *without failure, Step class are implemented alone
 */

#ifndef RECORD_H
#define RECORD_H

#include "step.h"

class Record
{
public:
    Record();
    ~Record(); //此处需要注意有必要删除map中第二个元素指向的地址
               //因为Step类对象都是在functions.cpp中动态创建的

public: //BU means operating obj is Backup map container
    void addStep(Step *step);
    Step* getStep(int);
    Step* getLastStep();
    Step* getLastStepBU();
    void addStepBU(Step *step);
    Step* getStepBU(int);
    void copyToBackup();
    void deleteFrom(int); //对于Backup的相关操作, 用于复盘状态中检查是否需要删除容器中的相关元素, 不释放Step*对象
    void clearBackup(); //用于退出复盘模式时候的内存释放以及将recordBackup清零
    coordinate regretRecord(); //用于悔棋, 删除最后一手的Step对象, 并且删除record中最后一个元素对
                         //不能被直接调用, 通过go类中的函数间接调用, 因为涉及到还原go类中的两个指针变量

private:
    map<int, Step*> record;
    map<int, Step*> recordBackup; //备份棋局记录器, 复盘时修改这个对象中的数据
};

#endif // RECORD_H
